package com.zys.http.processor.basic;

import com.intellij.psi.PsiElement;
import com.zys.http.ui.tree.node.MethodNode;

import java.util.List;
import java.util.Set;

/**
 * @author zys
 * @since 2025-01-13
 */
public interface ControllerProcessor {
    /**
     * @param element PsiClass or KtClass
     * @return 是否符合要求的 controller, 如符合 Java 的 Spring
     */
    boolean isTargetController(PsiElement element);

    /**
     * 获取 Psi 元素所在的包
     *
     * @param element PsiClass or KtClass
     * @return 包名或 null
     */
    String controllerPackageName(PsiElement element);

    /**
     * @param element PsiClass or KtClass
     * @return 获取 Psi 元素所有的注解(包括父级注解)
     */
    Set<? extends PsiElement> controllerAnnotations(PsiElement element);

    /**
     * @param element PsiClass or KtClass
     * @return controller 上的路径
     */
    List<String> controllerPaths(PsiElement element);

    /**
     * @param element PsiClass or KtClass
     * @return controller 上的 swagger 说明
     */
    String controllerSwagger(PsiElement element);

    /**
     * @param element PsiClass or KtClass
     * @return 当前 controller 中的符合要求的所有方法(包括父级)
     */
    List<? extends PsiElement> controllerMethods(PsiElement element);

    /**
     * @param element    PsiClass or KtClass
     * @param modulePath 模块路径
     * @return 创建当前 controller 下的树形方法节点
     */
    List<MethodNode> methodNodes(PsiElement element, String modulePath);
}
